// cloudfunctions/getSuggestions/index.js
const db = uniCloud.database();
const aMap = uniCloud.importObject('uni-map-co')

exports.main = async (event, context) => {
	const {
		keyword,
		location
	} = event;
	const trimKeyword = keyword?.trim();

	if (!trimKeyword) {
		return {
			success: true,
			data: {
				address: [], // 地址+经纬度（新增结构）
				chatContent: [], // 聊天内容
				product: [], // 商品
				groupName: [], // 群名
			},
		};
	}

	// 模糊匹配正则（忽略大小写，包含关键字即可）
	const matchReg = new RegExp(trimKeyword, "i");

	try {
		// 并行执行：3个数据库查询 + 1个高德API请求（提升效率）
		const [groupRes, messageRes, goodsRes, amapRes] = await Promise.all([
			// 1. 查询group集合：匹配groupName或signature字段（查找群）
			db
			.collection("Group")
			.where({
				$or: [{
						groupName: matchReg
					}, // 群名
					{
						signature: matchReg
					}, // 签名（修正拼写：singnatue → signature）
				],
			})
			.limit(30)
			.get(),

			// 2. 查询publicMessage集合：匹配content.text（查找聊天记录）
			db
			.collection("message_public")
			.where({
				"content.text": matchReg
			})
			.limit(30)
			.get(),

			// 3. 查询sendgood集合：匹配productName（查找商品）
			db
			.collection("sendgood")
			.where({
				productName: matchReg
			})
			.limit(30)
			.get(),

			// 4. 调用高德地理编码API：地址关键字 → 经纬度
			getAddressWithLatLng(trimKeyword,location),
		]);

		// 结果分类处理（去重+格式化）
		const result = {
			// 地址分类：包含地址名称、经度、纬度（去重）
			address:amapRes,
			

			// 聊天内容分类：去重+过滤空值
			message: messageRes.data,

			// 商品分类：去重+过滤空值
			product: goodsRes.data,

			// 群名分类：去重+过滤空值（仅保留匹配的群名）
			group: groupRes.data

		};

		return {
			success: true,
			data: result
		};

	} catch (error) {
		console.error("综合查询失败:", error);
		return {
			success: false,
			message: "查询失败，请稍后重试",
			errorMsg: error.message,
		};
	}
};

/**
 * 调用高德地理编码API，根据地址关键字获取地址+经纬度
 * @param {string} keyword - 地址关键字
 * @returns {Array} - 格式：[{ address: string, longitude: string, latitude: string }]
 */
async function getAddressWithLatLng(keyword,location) {

	try {
	
			const res = await aMap.loc2add({
			location: `${location.latitude},${location.longitude}`
		});	
		let city = res.result.city
		
		const response = await aMap.address2location({
			address: keyword,
			city:city

		})
		console.log("地址结果",response);
        const addressList=response.originalResult?.geocodes||[]
       
		// 高德API返回格式校验（status=1表示成功）
		if (addressList.length===0) {
			console.log("高德地理编码无结果，keyword:", keyword);
			return [];
		}
        return addressList

	} catch (apiError) {
		console.error("高德地理编码API请求失败:", apiError);
		return []; // API失败不影响整体查询，仅地址字段返回空
	}
}